<?php

Class Flusso_db {

    /**
     * questo metodo restituisce il successore di un figlio inserito 
     * all'interno di un flusso di un determinato processo il successore
     * 
     * @param int $idProcessoSanzionatorio
     * @param int $idFasePadre
     * @return array[] $ret 
     */
    public static function getNodiFigli($idProcessoSanzionatorio, $idFasePadre) {
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $query = "SELECT * FROM fase WHERE id_padre='" . $idFasePadre . "'";
            $ret = $db->fetchAll($query);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $ret;
    }

    /**
     * Questo metodo restituisce tutti i dati di un nodo dato
     * il suo id
     * 
     * @param type $id 
     */
    public static function getNodi($id) {
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $query = "SELECT * FROM fase WHERE id_fase='" . $id . "'";
            $ret = $db->fetchRow($query);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $ret;
    }

    /**
     * Questo metodo restituisce tutte l'azione eseguita per un dato processo
     * e id azione
     * ATTENZIONE: singola riga!!! si presuppone che l'azione si esegua solo una volta
     * 
     * 
     * @param type $id_azione
     * @param type $id_processo 
     */
    public static function getAzioneEseguita($id_azione, $id_processo) {
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $query = "SELECT * FROM azione_eseguita WHERE (id_processo_sanzionatorio=$id_processo AND id_azione=$id_azione)";
            
            $ret = $db->fetchRow($query);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $ret;
    }

    /**
     * Questo metodo ritorna tutti i dati di una fase dato il suo id
     * ATTENZIONE: prendo solo una riga
     * 
     * @param int $idFase
     * @return array[] $ret 
     */
    public static function getFaseDaId($idFase) {
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $query = "SELECT * FROM fase WHERE id_fase='" . $idFase . "'";
            $ret = $db->fetchRow($query);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $ret;
    }

    /**
     * Questo metodo ritorna tutti i dati di una processo sanzionatorio dato il suo id
     * ATTENZIONE: prendo solo una riga
     * 
     * @param int $idProcesso
     * @return array[] $ret 
     */
    public static function getProcessoDaId($idProcesso) {
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $query = "SELECT * FROM processo_sanzionatorio WHERE id_processo_sanzionatorio='" . $idProcesso . "'";
            $ret = $db->fetchRow($query);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $ret;
    }

    /**
     * Questo metodo restituisce tutte le azioni dato 
     * l'id della loro fase associata
     * 
     * @param int $idFase 
     * @return array[] $ret
     */
    public static function getAzioniDaIdFase($idFase) {
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $query = "SELECT * FROM azione WHERE id_fase='" . $idFase . "'";
            $ret = $db->fetchAll($query);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $ret;
    }

    /**
     * Questo metodo restituisce la tupla di lib_tipo_azione corrispondente
     * alla tupla di azione dato l'id azione
     * ATTENZIONE: prende solo una tupla
     * 
     * @param int $idAzione
     * @return  array[] $ret
     * 
     */
    public static function AzioneToLibTipoAzione($idAzione) {
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $query = "SELECT * FROM lib_tipo_azione WHERE id_lib_tipo_azione='" . $idAzione . "'";
            $ret = $db->fetchRow($query);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $ret;
    }

    /**
     * Questo metodo restituisce tutti i tipi di processo
     * 
     */
    public static function getTipiProcesso() {
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $query = "SELECT * FROM lib_tipo_processo_sanzionatorio";
            $ret = $db->fetchAll($query);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $ret;
    }

    /**
     * prelevo dal db tutti i processi in corso
     * di una determinata persona
     * 
     * @param type $id_persona
     * @return type 
     */
    public static function getProcessiByIdPersona($id_persona) {
        $processi = array();
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $statement = "SELECT azione_eseguita.id_processo_sanzionatorio"
                    . " FROM azione_eseguita"
                    . " INNER JOIN processo_sanzionatorio ON azione_eseguita.id_processo_sanzionatorio = processo_sanzionatorio.id_processo_sanzionatorio"
                    . " INNER JOIN azione ON azione.id_azione = azione_eseguita.id_azione"
                    . " INNER JOIN lib_tipo_azione ON lib_tipo_azione.id_lib_tipo_azione = azione.id_lib_tipo_azione"
                    . " INNER JOIN responsabile ON azione_eseguita.id_azione_eseguita = responsabile.id_azione_eseguita"
                    . " WHERE responsabile.id_persona=$id_persona";

            $processi = $db->fetchAll($statement);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $processi;
    }


    /**
     * 
     * questa funzione preleva dal db tutti i processi presenti al suo interno
     * attivi e non.
     *
     * @return type 
     */
    public static function getAllProcessi() {
        $processi = array();
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $statement = "SELECT azione_eseguita.id_processo_sanzionatorio"
                    . " FROM azione_eseguita"
                    . " INNER JOIN processo_sanzionatorio ON azione_eseguita.id_processo_sanzionatorio = processo_sanzionatorio.id_processo_sanzionatorio"
                    . " INNER JOIN azione ON azione.id_azione = azione_eseguita.id_azione"
                    . " INNER JOIN lib_tipo_azione ON lib_tipo_azione.id_lib_tipo_azione = azione.id_lib_tipo_azione"
                    . " INNER JOIN responsabile ON azione_eseguita.id_azione_eseguita = responsabile.id_azione_eseguita";

            $processi = $db->fetchAll($statement);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $processi;
    }

    
    
    
    /**
     *
     * @param type $processi
     * @return type 
     */
    public static function showProcess($processi) {

        $new_processi = array();
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            foreach ($processi as $processo) {


                $id_processo_sanzionatorio = intval($processo['id_processo_sanzionatorio']);

                $statement = "SELECT conclusione.id_conclusione" .
                        " FROM azione_eseguita" .
                        " INNER JOIN processo_sanzionatorio" .
                        " ON azione_eseguita.id_processo_sanzionatorio=processo_sanzionatorio.id_processo_sanzionatorio" .
                        " INNER JOIN azione" .
                        " ON azione.id_azione = azione_eseguita.id_azione" .
                        " INNER JOIN lib_tipo_azione" .
                        " ON lib_tipo_azione.id_lib_tipo_azione = azione.id_lib_tipo_azione" .
                        " INNER JOIN conclusione" .
                        " ON conclusione.id_azione_eseguita = azione_eseguita.id_azione_eseguita" .
                        " WHERE processo_sanzionatorio.id_processo_sanzionatorio=$id_processo_sanzionatorio AND lib_tipo_azione.descrizione=\"conclusione\"";

                $close = $db->fetchRow($statement);
                $new_processi[$id_processo_sanzionatorio]['close'] = (($close['id_conclusione'] == null)) ? 0 : $close['id_conclusione'];
            }


            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $new_processi;
    }

    /**
     * Questo metodo restituisce l'id della fase radice dato un id tipo
     * di processo
     *
     * @param type $tipo_processo 
     */
    public static function getIdRadice($tipo_processo) {
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $query = "SELECT id_fase FROM fase WHERE (id_lib_tipo_processo_sanzionatorio=$tipo_processo AND id_padre=0)";
            $ret = $db->fetchRow($query);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $ret;
    }
    
    /**
     * Questo metodo aggiorna lo stato di un processo ad una nuova fase
     * corrente
     * 
     * @param type $id_fase
     * @param type $id_processo 
     */
    public static function aggiornaFaseCorrenteProcesso($id_fase,$id_processo){
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();
            $data=array(
                "id_fase_attuale" => $id_fase,
            );
            $statement="id_processo_sanzionatorio=$id_processo";
            $ret=$db->update('processo_sanzionatorio', $data, $statement);
            
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $ret;
    }
    /**
     * Questo metodo mi fornisce l'id azione eseguita dato id fase e id processo sanzionatorio e id_azione
     * 
     * @param int $id_fase
     * @param int $id_processo_sanzionatorio 
     * @param int $id_azione
     * @return boolean $ret
     */
    public static function getAzioneEseguitaDaProcessoFase($id_processo_sanzionatorio,$id_azione){
        try{
           require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $query = "SELECT azione_eseguita.* ".
                    "FROM azione_eseguita ".
                    "INNER JOIN azione ON azione.id_azione = azione_eseguita.id_azione " .
                    "INNER JOIN fase ON fase.id_fase = azione.id_fase ".
                    "WHERE (azione_eseguita.id_processo_sanzionatorio=$id_processo_sanzionatorio AND azione.id_azione=$id_azione)";
            $ret = $db->fetchRow($query);
            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $ret;
    }
    
    /**
     * Questo metodo ottiene tutte le informazioni di un processo 
     * sanzionatorio
     * 
     * @param type $id_processo
     * @return type 
     */
    public static function getInfoProcesso($id_processo){
        $processo = array();
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $id_processo_sanzionatorio = intval($id_processo);

            $statement = "SELECT *" .
                    " FROM processo_sanzionatorio" .
                    " INNER JOIN azione_eseguita" .
                    " ON azione_eseguita.id_processo_sanzionatorio = processo_sanzionatorio.id_processo_sanzionatorio" .
                    " INNER JOIN responsabile" .
                    " ON azione_eseguita.id_azione_eseguita = responsabile.id_azione_eseguita" .                                        
                    " INNER JOIN persona" .
                    " ON persona.id_persona = responsabile.id_persona" .                                                            
                    " WHERE processo_sanzionatorio.id_processo_sanzionatorio=$id_processo_sanzionatorio";

            $processo = $db->fetchRow($statement);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $processo;   
    }
    
    /**
     * Questo metodo prende i dati per popolare il verbale
     * di contestazione
     *  
     * @param type $id_processo
     * @return type 
     */
    public static function getDatiVerbaleDiContestazione($id_processo) {
        $accertamento = array();
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $id_processo_sanzionatorio = intval($id_processo);

            $statement = "SELECT contestazione.*" .
                    " FROM contestazione" .
                    " INNER JOIN azione_eseguita" .
                    " ON azione_eseguita.id_azione_eseguita = contestazione.id_azione_eseguita" .
                    " WHERE azione_eseguita.id_processo_sanzionatorio=$id_processo_sanzionatorio";

            $accertamento = $db->fetchRow($statement);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $accertamento;
        
    }
    
    /**
     * Questo metodo prende i dati per popolare la notifica di contestazione
     *  
     * @param type $id_processo
     * @return type 
     */
    public static function getDatiNotificaContestazione($id_processo) {
        $contestazione = array();
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $id_processo_sanzionatorio = intval($id_processo);

            $statement = "SELECT notifica_contestazione.*" .
                         " FROM notifica_contestazione" .
                         " INNER JOIN azione_eseguita" .
                         " ON azione_eseguita.id_azione_eseguita = notifica_contestazione.id_azione_eseguita" .
                         " WHERE azione_eseguita.id_processo_sanzionatorio=$id_processo_sanzionatorio";

            $contestazione = $db->fetchRow($statement);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $contestazione;
        
    }
  
    /**
     * Questo metodo prende i dati per il verbale di ricorso
     *  
     * @param type $id_processo
     * @return type 
     */
    public static function getDatiVerbaleDiRicorso($id_processo) {
        $accertamento = array();
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $id_processo_sanzionatorio = intval($id_processo);

            $statement = "SELECT ricorso.*" .
                    " FROM ricorso" .
                    " INNER JOIN azione_eseguita" .
                    " ON azione_eseguita.id_azione_eseguita = ricorso.id_azione_eseguita" .
                    " WHERE azione_eseguita.id_processo_sanzionatorio=$id_processo_sanzionatorio";

            $accertamento = $db->fetchRow($statement);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $accertamento;
        
    }
    
     /**
     * Questo metodo prende i dati per il pagamento
     *  
     * @param type $id_processo
     * @return type 
     */
    public static function getDatiPagamento($id_processo) {
        $accertamento = array();
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $id_processo_sanzionatorio = intval($id_processo);

            $statement = "SELECT pagamento.*" .
                    " FROM pagamento" .
                    " INNER JOIN azione_eseguita" .
                    " ON azione_eseguita.id_azione_eseguita = pagamento.id_azione_eseguita" .
                    " WHERE azione_eseguita.id_processo_sanzionatorio=$id_processo_sanzionatorio";

            $accertamento = $db->fetchRow($statement);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $accertamento;
        
    }    
    
    public static function getDatiAccertmento($id_processo) {
        $accertamento = array();
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();

            $id_processo_sanzionatorio = intval($id_processo);

            $statement = "SELECT accertamento.*" .
                    " FROM accertamento" .
//                    " INNER JOIN processo_sanzionatorio" .
//                    " ON azione_eseguita.id_processo_sanzionatorio=processo_sanzionatorio.id_processo_sanzionatorio" .
                    " INNER JOIN azione_eseguita" .
                    " ON azione_eseguita.id_azione_eseguita = accertamento.id_azione_eseguita" .
                    " INNER JOIN lib_comune" .
                    " ON lib_comune.id_lib_comune = accertamento.id_lib_comune" .
                    " WHERE azione_eseguita.id_processo_sanzionatorio=$id_processo_sanzionatorio";

            $accertamento = $db->fetchRow($statement);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $accertamento;
        
    }
    
    public function getDatiConclusione($id_conclusione) {
        $concluisone = array();
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();
            $statement =   $statement = "SELECT * FROM conclusione WHERE id_conclusione='" . $id_conclusione . "'";
            $concluisone = $db->fetchRow($statement);

            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $concluisone;        
    }
    
    
//    public static function getDatiContestazione($id_processo) {
//        $accertamento = array();
//        try {
//            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
//            $db = Db_Db::conn();
//
//            $id_processo_sanzionatorio = intval($id_processo);
//
//            $statement = "SELECT contestazione.*" .
//                    " FROM contestazione" .
////                    " INNER JOIN processo_sanzionatorio" .
////                    " ON azione_eseguita.id_processo_sanzionatorio=processo_sanzionatorio.id_processo_sanzionatorio" .
//                    " INNER JOIN azione_eseguita" .
//                    " ON azione_eseguita.id_azione_eseguita = contestazione.id_azione_eseguita" .
//                    " INNER JOIN lib_comune" .
//                    " ON lib_comune.id_lib_comune = accertamento.id_lib_comune" .
//                    " WHERE azione_eseguita.id_processo_sanzionatorio=$id_processo_sanzionatorio";
//
//            $accertamento = $db->fetchRow($statement);
//
//            $db->closeConnection();
//        } catch (Zend_Db_Exception $e) {
//            echo $e->getMessage();
//        }
//
//        return $accertamento;
//        
//    }    
    
    
    public static function getDatiVarDocByVariableName($variabile) {
        $var_doc = '';
        try {
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";
            $db = Db_Db::conn();
            $statement = "SELECT var_doc.valore" .
                    " FROM var_doc" .
                   // " INNER JOIN azione_eseguita" .
                   // " ON azione_eseguita.id_azione_eseguita = var_doc.id_azione_eseguita" .
                    ' WHERE var_doc.variabile="'.$variabile.'"';
            $var_doc = $db->fetchRow($statement);
            $db->closeConnection();
        } catch (Zend_Db_Exception $e) {
            echo $e->getMessage();
        }

        return $var_doc;
        
    }    
    
    /**
     *
     * @param type $data
     * @param type $variabile
     */
    public static function aggiornaVariabile($data,$variabile){
       try{
            require_once APPLICATION_PATH . "/models/Db/Db_Db.php";

//            print_r($variabile);
            
            $condition='variabile="'.$variabile .'"';
            $db = Db_Db::conn();
            $ret = $db->update('var_doc', $data, $condition);
            $db->closeConnection();

        } catch(Zend_Db_Exception $e) {
            echo $e->getMessage();
        }
    }    
    
    
}

?>
